package com.thinkin.services.util;

import com.thinkin.allDo.SysDao;
import com.thinkin.util.JsonHelper;

/**
 * 公共初始化下拉框数据接口
 * 
 * @author chenjq
 * 
 */
public class InitDataHelp {

	/**
	 * 定义table枚举类型，用于switch时使用string类型，若有新增新的初始化数据，请在这边添加相对应的字符串
	 * 
	 * @author chenjq
	 * 
	 */
	public enum InitTable {
		inittable, cusstate, cuslevel, settlement, cusattribute, idtclass, typeofetp, ntofetp, organization, allorg, pro, act, sub, curre, codetype, unittype, eunit_q, eunit_w, eunit_p, eunit_v, eunit_s, quanlity, e_condition, e_bizoptype, e_orgnization, e_customer;
		public static InitTable toTable(String str) {
			try {
				return valueOf(str);
			} catch (Exception ex) {
				return inittable;
			}
		}
	}

	// 入口函数，测试用，测试时请在方法前加上静态方法标识
	// public static void main(String[] args) {
	// InitDataHelp init = new InitDataHelp();
	// String test =
	// "{'initSQL':'&pro=&act=&allorg=','orgcd':'001','procd':'11'}";
	// String str = init.GetInitData(test);
	// System.out.printf(str);
	// }

	/**
	 * 获取下拉框初始化数据接口方法
	 * 
	 * @param param
	 *            该参数格式中每个标识符之间使用&或者=号来区分开，两个都用也可以，如：&cusstate=&cuslevel=&
	 *            settlement=&cusattribute=&idtclass=&typeofetp=&ntofetp
	 * @return
	 */
	public String GetInitData(String param) {
		StringBuffer stringBuffer = new StringBuffer();
		String result = "";
		if (param.indexOf("initSQL") > 0) {
			stringBuffer.append(this.BuildInitSQL(param));
			result = SysDao.getCommonServer().doQueryBatch(
					stringBuffer.toString(), true);
		} else {
			result = "{\'Error\':'未初始化initSQL参数'}";
		}
		return result;
	}

	/**
	 * 拼接要执行的sql
	 * 
	 * @param params
	 *            该参数格式中每个标识符之间使用&或者=号来区分开，两个都用也可以，如：&cusstate=&cuslevel=&
	 *            settlement=&cusattribute=&idtclass=&typeofetp=&ntofetp
	 * @return 拼接好的字符串
	 */
	private String BuildInitSQL(String param) {
		StringBuffer Str_SQL = new StringBuffer();
		try {
			org.json.JSONObject jsonObject = JsonHelper.toJsonString(param);
			String initSQL = jsonObject.getString("initSQL");
			String Orgcd = "";
			String Companycd = "";
			String Parentcd = "";
			// String eunit_q = "";
			// String eunit_w = "";
			// String eunit_v = "";
			// String eunit_s = "";
			// String eunit_p = "";
			// String quanlity = "";
			// String curre = "";
			// 组织代码
			if (jsonObject.has("orgcd")) {
				Orgcd = jsonObject.getString("orgcd");
			}
			// 公司代码
			if (jsonObject.has("companycd")) {
				Companycd = jsonObject.getString("companycd");
			}
			// 获取市区时需要的父级节点
			if (jsonObject.has("parentcd")) {
				Parentcd = jsonObject.getString("parentcd");
			}
			// // 单位管理
			// if (jsonObject.has("eunit_q")) {
			// eunit_q = jsonObject.getString("eunit_q");
			// }
			// if (jsonObject.has("eunit_p")) {
			// eunit_p = jsonObject.getString("eunit_p");
			// }
			// if (jsonObject.has("eunit_w")) {
			// eunit_w = jsonObject.getString("eunit_w");
			// }
			// if (jsonObject.has("eunit_v")) {
			// eunit_v = jsonObject.getString("eunit_v");
			// }
			// if (jsonObject.has("eunit_s")) {
			// eunit_s = jsonObject.getString("eunit_s");
			// }
			// // 品质代码
			// if (jsonObject.has("quanlity")) {
			// quanlity = jsonObject.getString("quanlity");
			// }
			// // 币别代码
			// if (jsonObject.has("curre")) {
			// curre = jsonObject.getString("curre");
			// }
			// String
			// test="&cusstate=&cuslevel=&settlement=&cusattribute=&idtclass=&typeofetp=&ntofetp";
			String[] Str_items = initSQL.split("&|=");
			for (String item : Str_items) {
				// 空不进行拼接
				if (item != null && item.length() != 0) {
					if (Str_SQL.toString().length() > 0) {
						Str_SQL.append("---~");
					}
					// 加item值为了后面序列化json字符串用
					Str_SQL.append(item);
					Str_SQL.append("---~");
					Str_SQL.append(this.GetInitSQL(item, Orgcd, Companycd,
							Parentcd));
				}
			}
		} catch (Exception e) {

		}
		return Str_SQL.toString();
	}

	/**
	 * 根据不同的标识获取相对应的sql
	 * 
	 * @param table
	 *            对应的sql标识
	 * @return
	 */
	private String GetInitSQL(String table, String Orgcd, String Companycd,
			String Parentcd) {
		String BuilderSQL = "";
		switch (InitTable.toTable(table)) {
		// 编码类型
		case codetype:
			BuilderSQL = InitSQL.InitCodeLibSQL("codetype");
			break;
		case unittype:
			BuilderSQL = InitSQL.InitCodeLibSQL("unittype");
			break;
		// 客户状态
		case cusstate:
			BuilderSQL = InitSQL.InitcusstateSQL();
			break;
		// 客户等级
		case cuslevel:
			BuilderSQL = InitSQL.InitcuslevelSQL();
			break;
		// 结算方式
		case settlement:
			BuilderSQL = InitSQL.InitsettlementSQL();
			break;
		// 客户属性
		case cusattribute:
			BuilderSQL = InitSQL.InitcusattributeSQL();
			break;
		// 行业分类
		case idtclass:
			BuilderSQL = InitSQL.InitidtclassSQL();
			break;
		// 企业类型
		case typeofetp:
			BuilderSQL = InitSQL.InittypeofetpSQL();
			break;
		// 企业性质
		case ntofetp:
			BuilderSQL = InitSQL.InitntofetpSQL();
			break;
		// 获取组织代码，按照个人组织代码，获取本身以及以下组织信息
		case organization:
			BuilderSQL = InitSQL.InitOrganizationSQL(Orgcd);
			break;
		// 获取所有公司组织代码
		case allorg:
			BuilderSQL = InitSQL.InitAllOrgSQL();
			break;
		// 获取省份
		case pro:
			BuilderSQL = InitSQL.InitProSQL();
			break;
		// 获取市区sql
		case act:
		case sub:
			BuilderSQL = InitSQL.InitActOrSubSQL(Parentcd);
			break;
		// 币别代码
		case curre:
			BuilderSQL = InitSQL.InitCurrSQL();
			break;
		// 单位
		case eunit_q:
			BuilderSQL = InitSQL.InitQuantityunit();
			break;
		case eunit_w:
			BuilderSQL = InitSQL.InitWeightunitt();
			break;
		case eunit_p:
			BuilderSQL = InitSQL.InitPieceunit();
			break;
		case eunit_v:
			BuilderSQL = InitSQL.InitVolumeunit();
			break;
		case eunit_s:
			BuilderSQL = InitSQL.InitSizeunit();
			break;
		// 品质
		case quanlity:
			BuilderSQL = InitSQL.InitQuanlity();
			break;
		// 品检状态
		case e_condition:
			BuilderSQL = InitSQL.initEcondition();
			break;
		// 收货类型
		case e_bizoptype:
			BuilderSQL = InitSQL.InitBizoptype();
			break;
		// 下单组织、执行组织
		case e_orgnization:
			BuilderSQL = InitSQL.InitOrganizationSQL(Orgcd);
			break;
		// 寄仓单位、货主、供应商
		case e_customer:
			BuilderSQL = InitSQL.InitCustomer();
			break;
		case inittable:// 该标识用于枚举转化报错时使用
			BuilderSQL = "";
			break;
		}
		return BuilderSQL;
	}
}
